package com.sz.admin.ai.controller.embedding;

import lombok.AllArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @描述:
 * @Author: TangYuan
 * @Date: 2025/3/4 11:16
 */
@RequestMapping("/ai/async/embedding")
@RestController
@CrossOrigin
@AllArgsConstructor
@Log4j2
public class AsyncEmbeddingController {
    //
    // private final IZsjAiUserService zsjAiUserService;
    // private final EmbeddingHandlerFactory embeddingHandlerFactory;
    // private final IZsjAiAsyncTaskService zsjAiAsyncTaskService;
    //
    // @LogAspect
    // @PostMapping("/doVectorization/fileUrlList")
    // public ApiResult<Long> fileUrlListEmbeddingAsync(@RequestBody Map<String, Object> map) {
    //     try {
    //         // 参数提取与校验
    //         String username = (String) map.get("username");
    //         String password = (String) map.get("password");
    //         List<FileDate> fileList = JSON.parseObject(JSON.toJSONString(map.get("fileList")), new TypeReference<>() {});
    //         String fileId = (String) map.get("fileId");
    //         String platformName = (String) map.get("platformName");
    //         String modelName = (String) map.get("modelName");
    //         String userId = (String) map.get("userId");
    //         String knowledgeBaseId = (String) map.get("knowledgeBaseId");
    //
    //         if (StringUtils.isEmpty(fileList)) return R.errror("文件不能为空");
    //         if (StringUtils.isEmpty(platformName)) return R.errror("模型平台参数错误， 目前支持（ollama，aliyun）");
    //         if (StringUtils.isEmpty(modelName)) return R.errror("模型名错误");
    //         if (StringUtils.isEmpty(userId)) return R.errror("用户标识不能为空");
    //         if (StringUtils.isEmpty(knowledgeBaseId)) return R.errror("知识库标识不能为空");
    //
    //         if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) return R.errror("用户名密码不能为空");
    //         ZsjAiUser zsjAiUser = zsjAiUserService.selectZsjAiUserByUsername(username);
    //         if (zsjAiUser == null) return R.errror("暂无用户");
    //         if (!password.equals(Md5Utils.hash(zsjAiUser.getUsername() + zsjAiUser.getPassword()))) return R.errror("密码不正确");
    //         if (zsjAiUser.getEnableFlag() != 1) return R.errror("用户未启用");
    //
    //         EmbeddingHandlerRequestDTO requestDTO = EmbeddingHandlerRequestDTO.builder()
    //                 .thirdPartyName(zsjAiUser.getUsername())
    //                 .modelName(modelName)
    //                 .modelKey("sk-f5bee87ddd3347f18faca5e8f6b10b73")
    //                 .fileId(fileId)
    //                 .userId(userId)
    //                 .knowledgeBaseId(knowledgeBaseId)
    //                 .build();
    //
    //         // 创建任务id --- 添加到数据库 字段：id 状态 msg
    //         // 运行中RUNNING 已完成COMPLETED 失败FAILED
    //         long taskId = 1000000000L + (long) (new Random().nextDouble() * 9000000000L);
    //         ZsjAiAsyncTask zsjAiAsyncTask = new ZsjAiAsyncTask();
    //         zsjAiAsyncTask.setId(taskId);
    //         zsjAiAsyncTask.setStatus("RUNNING");
    //         zsjAiAsyncTask.setType("EMBEDDING");
    //         zsjAiAsyncTask.setInfo("");
    //         zsjAiAsyncTaskService.insertZsjAiAsyncTask(zsjAiAsyncTask);
    //         // 异步处理任务
    //
    //         CompletableFuture.runAsync(() -> {
    //             processFiles(taskId, fileList, requestDTO, platformName);
    //         });
    //
    //         return R.success(taskId);
    //     } catch (Exception e) {
    //         log.error(e.getMessage());
    //         return R.errror();
    //     }
    // }
    //
    // private void processFiles(Long taskId, List<FileDate> fileList, EmbeddingHandlerRequestDTO requestDTO, String platformName) {
    //     boolean b;
    //     int succeed = 0;
    //     int fail = 0;
    //     List<Map<String, String>> info = new ArrayList<>();
    //     try {
    //         for (FileDate file : fileList) {
    //             List<Document> documentList = EmbeddingUtil.readAndSplit(file.getFileUrl());
    //             requestDTO.setDocumentList(documentList);
    //             requestDTO.setFileName(file.getFileName());
    //
    //             EmbeddingHandler embeddingHandler = embeddingHandlerFactory.getHandler(platformName);
    //             Boolean result = embeddingHandler.vectorizedData(requestDTO);
    //
    //             Map<String, String> map = new HashMap<>();
    //             map.put("flag", String.valueOf(result));
    //             map.put("fileName", file.getFileName());
    //             map.put("fileUrl", file.getFileUrl());
    //             info.add(map);
    //             if (result) {
    //                 succeed++;
    //             } else {
    //                 fail++;
    //             }
    //         }
    //         log.info("任务处理完成: {}", taskId);
    //         b = fail == 0;
    //     } catch (Exception e) {
    //         log.error("任务处理失败: {}", taskId, e);
    //         b = false;
    //     }
    //
    //     InfoDate list = InfoDate.builder().succeed(succeed).fail(fail).info(info).build();
    //
    //     // 更新任务状态
    //     ZsjAiAsyncTask zsjAiAsyncTask = new ZsjAiAsyncTask();
    //     zsjAiAsyncTask.setId(taskId);
    //     zsjAiAsyncTask.setStatus(b ? "COMPLETED" : "FAILED");
    //     zsjAiAsyncTask.setType("EMBEDDING");
    //     zsjAiAsyncTask.setInfo(JSON.toJSONString(list));
    //     zsjAiAsyncTaskService.updateZsjAiAsyncTask(zsjAiAsyncTask);
    // }
    //
    // @GetMapping("/getTaskStatus/{taskId}")
    // public R<Object> getTaskStatus(@PathVariable Long taskId) {
    //     ZsjAiAsyncTask zsjAiAsyncTask = zsjAiAsyncTaskService.selectZsjAiAsyncTaskById(taskId);
    //     if (zsjAiAsyncTask == null) {
    //         return R.errror("任务不存在");
    //     }
    //     zsjAiAsyncTask.setInfoDate(JSON.parseObject(zsjAiAsyncTask.getInfo(), InfoDate.class));
    //     zsjAiAsyncTask.setInfo(null);
    //     return R.success(zsjAiAsyncTask);
    // }
}
